<?php
/**
 * チームメンバー編集登録データマッパークラスモジュール
 */
require_once APPLICATION_PATH . '/models/Players/xml/Controller.php';
require_once 'Request/Request.php';
require_once 'Cookie/Cookie.php';

class Components_MemberEdit_Mapper extends Models_Players_Xml_Controller
{
	/** クッキーネーム：学年選択状態保存用クッキー */
	const NAME_COOKIE_AGE = 'CKAGE';

	const HTTP_REQUEST_KEY_MEMBERNAME = 'pname';
	const HTTP_REQUEST_KEY_AGE = 'AGE';
	const HTTP_REQUEST_KEY_MEMBERID = 'id';

	/** @var $_objRequest HTTPリクエスト */
	protected $_objRequest;

	/** @var $aryPlayerList */
	public $aryPlayerList;
	/** @var $_SchoolKind 学校種別 */
	protected $_SchoolKind;
	/** @var $_CurrentAge 現在表示中の年齢 */
	protected $_aryCurrentAge;

	/**
	 * コンストラクタ
	 * Enter description here ...
	 */
	public function __construct($SchoolKind)
	{
		/*** 学校種類設定 */
		$this->_SchoolKind = $SchoolKind;
		/*** 表示中年齢設定 */
		$this->_setAgeSelected();

		$this->loadFromFile();
		$this->aryPlayerList = $this->getPlayerList($this->_aryCurrentAge);

		$this->_objRequest = new Lib_Request();
	}

	/**
	 * 表示中の年齢リストを返す
	 * Enter description here ...
	 * @return array
	 */
	public function getCurrentAgeList()
	{
		return $this->_aryCurrentAge;
	}

	/**
	 * 選手を追加する
	 * (non-PHPdoc)
	 * @see Models_Players_Controller::add()
	 */
	public function add()
	{
		$this->_objRequest->clearValidKeyList();
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_AGE;
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_MEMBERNAME;
		if ( !$this->_objRequest->valid() ) {
			return FALSE;
		}

		$strAge = $this->_objRequest->get(self::HTTP_REQUEST_KEY_AGE);
		$strName = $this->_objRequest->get(self::HTTP_REQUEST_KEY_MEMBERNAME);
		parent::add($strAge, $strName);
		return TRUE;
	}

	/**
	 * メンバーを削除する
	 * (non-PHPdoc)
	 * @see Models_Players_Controller::delete()
	 */
	public function delete()
	{
		/**
		 * バリデーションリクエストキー設定＆チェック
		 */
		$this->_objRequest->clearValidKeyList();
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_MEMBERID;
		if ( !$this->_objRequest->valid() ) {
			return FALSE;
		}

		$sDeleteID = $this->_objRequest->get(self::HTTP_REQUEST_KEY_MEMBERID);
		parent::delete($sDeleteID);
		return TRUE;
	}

	/**
	 * メンバー情報を変更する
	 * (non-PHPdoc)
	 * @see Models_Players_Controller::update()
	 */
	public function update()
	{
		/**
		* バリデーションリクエストキー設定＆チェック
		*/
		$this->_objRequest->clearValidKeyList();
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_MEMBERID;
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_AGE;
		$this->_objRequest->ValidRequireList[] = self::HTTP_REQUEST_KEY_MEMBERNAME;
		if ( !$this->_objRequest->valid()) {
			return FALSE;
		}

		$strId = $this->_objRequest->get(self::HTTP_REQUEST_KEY_MEMBERID);
		$strAge = $this->_objRequest->get(self::HTTP_REQUEST_KEY_AGE);
		$strName = $this->_objRequest->get(self::HTTP_REQUEST_KEY_MEMBERNAME);
		parent::update($strId, $strAge, $strName);
		return TRUE;
	}

	/**
	 * 年齢フィルターコンバータ
	 * Enter description here ...
	 * @param unknown_type $sSrcValue
	 */
	protected function _convPlayerAgeFilter($sSrcValue)
	{
		$iAge = sprintf('%d', $sSrcValue);
		$sResult = 'U' . $iAge;
		return $sResult;
	}

	/**
	 * 年齢未設定時のデフォルト年齢を返す
	 * Enter description here ...
	 * @return string
	 */
	public function getDefaultAge()
	{
		$sResult = $this->_getDefaultAge();
		return $sResult;
	}

	/**
	 * クッキー（年齢）を設定する
	 * Enter description here ...
	 * @param array $aryAge 年齢一覧
	 */
	protected function _setCookieAge($aryAge)
	{
		/** @var 選択年齢クッキー */
		$objCookieAge = new Lib_Cookie_Name(self::NAME_COOKIE_AGE, 12);

		$sCookieValue = implode(",", $aryAge);
		/*** 選択状態保存クッキークリア */
		$objCookieAge->deleteCookie();
		/*** クッキー設定 */
		$objCookieAge->setValue($sCookieValue);
	}

	/**
	 * 表示中の年齢を設定する
	 * Enter description here ...
	 */
	protected function _setAgeSelected()
	{
		/** @var 選択年齢クッキー */
		$objCookieAge = new Lib_Cookie_Name(self::NAME_COOKIE_AGE, 12);

		/**
		 * リクエストチェック
		 * フォームリクエスト設定されている場合、これを優先する
		 * そうでない場合、クッキーの値を設定する
		 * クッキーにもない場合、学校種別の初期設定に従い設定する
		 */
		if ( isset ( $_REQUEST[self::HTTP_REQUEST_KEY_AGE]) ) {
			/** 配列判定 */
			if  (is_array($_REQUEST[self::HTTP_REQUEST_KEY_AGE]) ) {
				$this->_aryCurrentAge = $_REQUEST[self::HTTP_REQUEST_KEY_AGE];
			} else {
				$this->_aryCurrentAge = array($_REQUEST[self::HTTP_REQUEST_KEY_AGE]);
			}
		} else {
			/** クッキーチェック */
			if ( $objCookieAge->getValue() != '' ) {
				$this->_aryCurrentAge = explode(',', $objCookieAge->getValue());
			} else {
				$sDefaultAge = $this->getDefaultAge();
				$_REQUEST[self::HTTP_REQUEST_KEY_AGE] = $sDefaultAge;
				$this->_aryCurrentAge = array($sDefaultAge);
			}
			$_REQUEST[self::HTTP_REQUEST_KEY_AGE] = $this->_aryCurrentAge;
		}
		$this->_setCookieAge($this->_aryCurrentAge);
	}


	/**
	 * 年齢未設定時のデフォルト年齢を返す
	 * Enter description here ...
	 * @return string
	 */
	protected function _getDefaultAge()
	{
		switch ($this->_SchoolKind) {
			case Models_Players_Controller::JUNIOR_SCHOOL:
				return 'U12';
				break;
			case Models_Players_Controller::MIDDLE_SCHOOL:
				return 'U15';
				break;
			case Models_Players_Controller::HIGH_SCHOOL:
				return 'U18';
				break;
			default:
				return 'U12';
		}
	}
}